﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
using HardMobCommons;
using HardMobCommons.Entidades;

namespace HardMobTopicInfo
{
	public static class HardMobUserParser
	{
		public static List<Usuario> RetornarUsuarios(string html)
		{
			List<Usuario> usuarios = new List<Usuario>();
			
			HtmlDocument doc = new HtmlDocument();
			doc.LoadHtml(html);

			foreach (HtmlNode li in doc.DocumentNode.SelectNodes(@"//li"))
			{
				try
				{
					Usuario usuario = ObterUsuarioDeLI(li);
					usuarios.Add(usuario);
				}
				catch (Exception) { }
			}

			return usuarios;
		}

		private static Usuario ObterUsuarioDeLI(HtmlNode li)
		{
			Usuario usuario = null;
			
			if (li.HasChildNodes)
				usuario = new Usuario();

			foreach (HtmlNode node in li.ChildNodes)
			{
				if (node.Name == "dl")
				{
					usuario.HmId = ObterID(node);
					usuario.Mensagens.Add(ObterMensagens(node));
				}

				if (node.Name == "a")
				{
					usuario.Nome = node.InnerText;
				}
			}
			if (usuario != null)
				return usuario;

			throw new Exception("Usuário não encontrado");
		}

		private static RegistroMensagens ObterMensagens(HtmlNode dl)
		{
			HtmlNode dd = ObterDD(dl);
			RegistroMensagens registro = new RegistroMensagens();
			registro.Mensagens = dd.InnerText.TryParser<int>();

			return registro;
		}

		private static int ObterID(HtmlNode dl)
		{
			HtmlNode dd = ObterDD(dl);

			string find = "userid=";
			int index = dd.InnerHtml.IndexOf(find);
			string substr = dd.InnerHtml.Substring(index + find.Length, 10);

			int userID = substr.ProcuraNumeros();
			return userID;
		}

		private static HtmlNode ObterDD(HtmlNode dl)
		{
			HtmlNode dd = null;
			foreach (HtmlNode node in dl.ChildNodes)
			{
				if (node.Name == "dd")
				{
					dd = node;
				}
			}

			if(dd != null)
				return dd;

			throw new Exception("DD não encontrado");
		}


		
	}
}
